package optimizacion;

public class Funciones {
	public static double f1 (double x){
        double numerador = Math.sin(x);
        double denominador = 1 + Math.sqrt(x) + Math.cos(x)/(1+x);
        return numerador/denominador;
	}
	
	public static double f2 (double x, double y){
        double numerador = 2186 - Math.pow((Math.pow(x,2) + y - 11), 2) - Math.pow((x + Math.pow(y,2) - 7), 2);
        return numerador/2186;
	}
	
	public static double f3 (double x, double y){
        return 21.5 + x*Math.sin(4*Math.PI*x) + y*Math.sin(20*Math.PI*y);
	}
	
	public static double f4(double[] x, int n){
        double res = 0;
        for(int i=0; i<n; i++){
        	res = res - (Math.sin(x[i]) * Math.pow(Math.sin(((i+2)*Math.pow(x[i],2)/Math.PI)), 20));
        }	        	
        return res ;
	}
	
	public static double f5(double[] x){
        double sumatorio1 = 0;
        double sumatorio2 = 0;
        for (int i=1; i<=5; i++){
        	sumatorio1 += i*Math.cos((i+1)*x[0] + i);
        	sumatorio2 +=  + i*Math.cos((i+1)*x[1] + i);
        }
        return sumatorio1*sumatorio2;
	}
	
	public static void main(String[] args) {	
		
		System.out.println(Funciones.f4(new double[]{2.2}, 1));
		
//		Aptitud: -197.28383917935994
//		Fenotipo 0: 5.608792181336833
//		Fenotipo 1: -1.2122437457561173
		
		System.out.println(Funciones.f5(new double[]{5.608792181336833, -1.2122437457561173}));
		
	}
}
